package com.plz.afmt.service;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.UUID;

/**
 * @author swing
 * OSS统一接口
 */

public abstract class OssService {



    public String quickUploadSuffix(MultipartFile file)throws Exception {
        throw new NoSuchMethodException("该方法暂未实现");
    }
    public String quickUploadSuffix(MultipartFile file, String suffix)throws Exception {
        throw new NoSuchMethodException("该方法暂未实现");
    }
    public String quickUploadPath(MultipartFile file, String path)throws Exception {
        throw new NoSuchMethodException("该方法暂未实现");
    }

    /**
     * 文件路径
     *
     * @param prefix 前缀
     * @param suffix 后缀
     * @return 返回上传路径
     */
    public final String getPath(String prefix, String suffix) {
        //生成uuid
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        String path = uuid;
        if (StringUtils.isNotBlank(prefix)) {
            path = prefix + "_" + uuid;
        }
        String newSuffix = "." + suffix.replaceAll("\\.", "");

        return path + newSuffix;
    }



    /**
     * 文件上传
     *
     * @param data 文件字节数组
     * @param path 文件路径，包含文件名
     * @return 返回http地址
     */
    public abstract String upload(byte[] data, String path);

    /**
     * 文件上传
     *
     * @param data   文件字节数组
     * @param suffix 后缀
     * @return 返回http地址
     */
    public abstract String uploadSuffix(byte[] data, String suffix);

    /**
     * 文件上传
     *
     * @param inputStream 字节流
     * @param path        文件路径，包含文件名
     * @return 返回http地址
     */
    public abstract String upload(InputStream inputStream, String path);

    /**
     * 富文本内文件上传
     *
     * @param inputStream 字节流
     * @param path        文件路径，包含文件名
     * @return 返回http地址
     */
    public abstract String fbupload(InputStream inputStream, String path);

    /**
     * 文件上传
     *
     * @param inputStream 字节流
     * @param suffix      后缀
     * @return 返回http地址
     */
    public abstract String uploadSuffix(InputStream inputStream, String suffix);

    /**
     * 批量上传文件夹中全部文件 工具 - （现仅支持七牛云）
     * 慎重使用，文件夹中文件过多将加载较长时间
     *
     * @param filePath 文件夹路径
     * @param directory 上传文件存储目录
     * @param separator 需上传文件路径的分割符
     * @return
     */
    public abstract Boolean batchUploadFile(String filePath,String directory,String separator);

    /**
     * 富文本内文件上传
     *
     * @param inputStream 字节流
     * @param suffix      后缀
     * @return 返回http地址
     */
    public String fbUploadSuffix(InputStream inputStream, String suffix){
        return fbupload(inputStream, getPath(null, suffix));
    }
}
